import numpy as np
import pandas as pd
from scipy.interpolate import lagrange
#s是原始数据，n是插补位置（索引），k为前后数据个数，number为第几次插补
def ployinterp_column(s,n,k,number):
    # range随机数,取出前k个随机数
    y1 = list(range(n-k,n))
    # 后k个随机数
    y2 = list(range(n+1,n+k+1))
    #取出原数据对应的值
    y = s.reindex(y1+y2)
    print("补差前的数据：")
    print(y)
    #删除空值
    y = y[y.notnull()]
    print("删除空格后的数据：")
    print(y)
    #判断是否至少有两个值用于生成拉格朗日
    if len(y) <2:
        print('前后非空数据长度小于二，无法使用拉格朗日方法')
        return np.nan
    else:
        # 根据数据拉格朗日
        ln = lagrange(y.index, list(y))
        print("构建的拉格朗日公式为：")
        print(ln)
        x = ln(n)
        # abs绝对值
        return int(abs(x))
#定义初始变量,Series转换一列表格的格式（索引对应值）
data = pd.Series([1,2,3,None,5,6])
print("原始数据：")
print(data)
number = 0
for i in range(len(data)):
    if pd.isnull(data.iloc[i]):
        print(f"空值索引为：{i}")
        number +=1
        data[i] = ployinterp_column(data,i,1,number)
        #检查是否为np.nan
        if np.isnan(data[i]):
            print("不能插入")
        else:
            print(f"这是第{number}次在{i}位置插补了{data[i]}后的数据")
            print(data)


data1 = pd.Series([1,4,5,6,None,9,15,17,19,None,26,29,35])
print('原始数据：')
print(data1)
number1=0
for i in range(len(data1)):
    if pd.isnull(data1.iloc[i]):
        print(f"空值索引为：{i}")
        number1 +=1
        data1[i] = ployinterp_column(data1,i,5,number1)
        if np.isnan(data1[i]):
            print("不能插入")
        else:
            print(f"这是第{number1}次在{i}位置插补了{data1[i]}后的数据")
            print(data1)




